In [1]:
import pandas as pd
import numpy as np
import plotly.express as px
In [2]:
df = pd.read_csv("complete.csv")
In [3]:
cat = df.groupby(["category", "awardYear"]).count()
cat.reset_index(inplace=True)
cat = cat[["category", "awardYear", "prizeAmount"]]
In [4]:
categories = ['Chemistry', 'Economic Sciences', 'Literature', 'Peace', 'Physics',
       'Physiology or Medicine']

for year in cat["awardYear"]:
    for category in categories:
        if len(cat[(cat["awardYear"] == year) & (cat["category"] == category)]) == 0:
            cat = cat.append({"category" : category, "awardYear" : year, "prizeAmount" : 0}, ignore_index=True)
            
        
In [5]:
cat.sort_values(["awardYear", "category"], inplace=True)
cat.rename(columns={"awardYear" : "Year"}, inplace=True)
cat["prizeCum"] = cat.groupby("category").agg({"prizeAmount" : "cumsum"})
cat.sort_values(["Year", "prizeCum"], inplace=True)
In [6]:
fig = px.bar(data_frame = cat, x = "prizeCum", y = "category", color="category",
             title = "Cumulative number of Nobel prizes in each category over the years", range_x = (0, 220),
             animation_frame="Year",labels = {"prizeCum" : "Cumulative number of prizes", "category" : "Category"},
             template = "simple_white", orientation="h")

fig.update_yaxes(categoryorder='total ascending')
fig.update_layout(xaxis = {"fixedrange" : True}, yaxis = {"fixedrange" : True})
fig.update_xaxes(showgrid=True, gridcolor="lightgray")
fig.layout.updatemenus[0].buttons[0].args[1]['frame']['duration'] = 250
fig.layout.updatemenus[0].buttons[0].args[1]['transition']['duration'] = 250

fig.show(config = {"displayModeBar" : False})